package cn.iocoder.yudao.framework.business.order.service;

import cn.iocoder.yudao.framework.business.basic.service.SimpleDetailService;
import cn.iocoder.yudao.framework.business.order.pojo.dto.OrderSubmitDTO;
import cn.iocoder.yudao.framework.business.order.pojo.vo.BizOrderVO;
import cn.iocoder.yudao.framework.business.order.pojo.vo.OrderSubmitVO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;

/**
 * 订单 Service 接口类，由子类继承
 *
 * @author 山野羡民
 */
@Validated
public interface AppOrderService<RESP extends BizOrderVO, SAVE extends OrderSubmitDTO> extends SimpleDetailService<RESP> {

    /**
     * 提交订单
     *
     * @param reqVO  创建信息
     * @param userId 用户编号
     * @param userIp 用户 IP
     * @param userUa 用户 UA
     * @return 订单提交成功后返回的信息
     */
    OrderSubmitVO submit(@Valid SAVE reqVO, Long userId);

    /**
     * 获得订单详情
     *
     * @param tradeNo 交易单号
     * @return 订单
     */
    RESP getByTradeNo(String tradeNo);

    /**
     * 支付成功后检查并更新订单状态
     *
     * @param tradeNo 交易单号
     * @param payNo 支付单号
     */
    void checkAndUpdatePaid(String tradeNo, String payNo);

    /**
     * 获取订单分页
     *
     * @param pageNo 页码
     * @param pageSize 每页条数
     * @param userId 用户编号
     * @return 订单分页
     */
    PageResult<RESP> getPage(Integer pageNo, Integer pageSize, Long userId);

}
